.container的[Unit]是定義各服務之間的依賴關係,[Service]則是使用systemd.service的標準設定,其中最重要的key是Restart:
- Restart 重啟策略
- always:service結束後自動重啟。
- no:service結束後不重啟。
- on-failure:service異常結束後才自動重啟,比如exit code為1、收到kill signal
- RestartSec:service掛掉後等多久自動重啟。用於Restart=always與on-failure。
- TimeoutStartSec:systemd最多允許service啟動花多久的時間,特別是spring boot容器,初始化的時間算蠻久的,在客戶端的k8s有見識過啟動快十分鐘才完成。超過這時間當然就failure。
- ExecStartPre / ExecStartPost:啟動前 / 後要執行的script。
- ExecStopPost:service結束後要執行的script,通常是cleanup任務。
- Type:service類型,通常不用在.container設定,更根據副檔名不同由podman quadlet決定。
- notify:.container、.kube
- forking:.pod
- oneshot:.network、.volume、.image、.build
- RemainAfterExit:service type為oneshot才需要,yes表示active,no表示failure,比如a2a-net在STATUS為active(exited)。
- Environment:在[Container]與[Service]標籤都適用,若是像Spring Boot的application.yaml裡的參數,以及JAVA_OPTS設定記憶體,更適合放在[Container]下。
- WorkingDirectory:若在[Container]下定義,是指容器裡的工作目錄;若在[Service]下定義,則是Host主機工作目錄。
- SuccessExitStatus:修改exit code成功結束狀態值,預設值為0,通常exit code=0視為正常結束,其它值為異常結束,可以藉此改變。
- StartLimitIntervalSec、StartLimitBurst:
這兩個是[Unit]設定,與Restart相關,舉例如下:
[Unit]
StartLimitIntervalSec=60
StartLimitBurst=5
[Service]
Restart=on-failure
RestartSec=5
60秒內,最多允許5次啟動失敗,超過限制則systemd則停止重啟並報錯:Start request repeated too quickly